home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 3.iso / dist / fw_qt3.idb / usr / freeware / Qt / examples / opengl / box / glbox.cpp.z / glbox.cpp
C/C++ Source or Header  |  2002-04-08  |  4KB  |  172 lines

  1. /****************************************************************************
  2. ** $Id:  qt/glbox.cpp   3.0.3   edited Oct 12 12:18 $
  3. **
  4. ** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
  5. **
  6. ** This file is part of an example program for Qt.  This example
  7. ** program may be used, distributed and modified without limitation.
  8. **
  9. *****************************************************************************/
  10.  
  11. /****************************************************************************
  12. **
  13. ** This is a simple QGLWidget displaying an openGL wireframe box
  14. **
  15. ** The OpenGL code is mostly borrowed from Brian Pauls "spin" example
  16. ** in the Mesa distribution
  17. **
  18. ****************************************************************************/
  19.  
  20. #include "glbox.h"
  21.  
  22. #if defined(Q_CC_MSVC)
  23. #pragma warning(disable:4305) // init: truncation from const double to float
  24. #endif
  25.  
  26. /*!
  27.   Create a GLBox widget
  28. */
  29.  
  30. GLBox::GLBox( QWidget* parent, const char* name )
  31.     : QGLWidget( parent, name )
  32. {
  33.     xRot = yRot = zRot = 0.0;        // default object rotation
  34.     scale = 1.25;            // default object scale
  35.     object = 0;
  36. }
  37.  
  38.  
  39. /*!
  40.   Release allocated resources
  41. */
  42.  
  43. GLBox::~GLBox()
  44. {
  45.     makeCurrent();
  46.     glDeleteLists( object, 1 );
  47. }
  48.  
  49.  
  50. /*!
  51.   Paint the box. The actual openGL commands for drawing the box are
  52.   performed here.
  53. */
  54.  
  55. void GLBox::paintGL()
  56. {
  57.     glClear( GL_COLOR_BUFFER_BIT );
  58.  
  59.     glLoadIdentity();
  60.     glTranslatef( 0.0, 0.0, -10.0 );
  61.     glScalef( scale, scale, scale );
  62.  
  63.     glRotatef( xRot, 1.0, 0.0, 0.0 ); 
  64.     glRotatef( yRot, 0.0, 1.0, 0.0 ); 
  65.     glRotatef( zRot, 0.0, 0.0, 1.0 );
  66.  
  67.     glCallList( object );
  68. }
  69.  
  70.  
  71. /*!
  72.   Set up the OpenGL rendering state, and define display list
  73. */
  74.  
  75. void GLBox::initializeGL()
  76. {
  77.     qglClearColor( black );         // Let OpenGL clear to black
  78.     object = makeObject();        // Generate an OpenGL display list
  79.     glShadeModel( GL_FLAT );
  80. }
  81.  
  82.  
  83.  
  84. /*!
  85.   Set up the OpenGL view port, matrix mode, etc.
  86. */
  87.  
  88. void GLBox::resizeGL( int w, int h )
  89. {
  90.     glViewport( 0, 0, (GLint)w, (GLint)h );
  91.     glMatrixMode( GL_PROJECTION );
  92.     glLoadIdentity();
  93.     glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 15.0 );
  94.     glMatrixMode( GL_MODELVIEW );
  95. }
  96.  
  97.  
  98. /*!
  99.   Generate an OpenGL display list for the object to be shown, i.e. the box
  100. */
  101.  
  102. GLuint GLBox::makeObject()
  103. {    
  104.     GLuint list;
  105.  
  106.     list = glGenLists( 1 );
  107.  
  108.     glNewList( list, GL_COMPILE );
  109.  
  110.     qglColor( white );              // Shorthand for glColor3f or glIndex
  111.  
  112.     glLineWidth( 2.0 );
  113.  
  114.     glBegin( GL_LINE_LOOP );
  115.     glVertex3f(  1.0,  0.5, -0.4 );
  116.     glVertex3f(  1.0, -0.5, -0.4 );
  117.     glVertex3f( -1.0, -0.5, -0.4 );
  118.     glVertex3f( -1.0,  0.5, -0.4 );
  119.     glEnd();
  120.  
  121.     glBegin( GL_LINE_LOOP );
  122.     glVertex3f(  1.0,  0.5, 0.4 );
  123.     glVertex3f(  1.0, -0.5, 0.4 );
  124.     glVertex3f( -1.0, -0.5, 0.4 );
  125.     glVertex3f( -1.0,  0.5, 0.4 );
  126.     glEnd();
  127.  
  128.     glBegin( GL_LINES );
  129.     glVertex3f(  1.0,  0.5, -0.4 );   glVertex3f(  1.0,  0.5, 0.4 );
  130.     glVertex3f(  1.0, -0.5, -0.4 );   glVertex3f(  1.0, -0.5, 0.4 );
  131.     glVertex3f( -1.0, -0.5, -0.4 );   glVertex3f( -1.0, -0.5, 0.4 );
  132.     glVertex3f( -1.0,  0.5, -0.4 );   glVertex3f( -1.0,  0.5, 0.4 );
  133.     glEnd();
  134.  
  135.     glEndList();
  136.  
  137.     return list;
  138. }
  139.  
  140.  
  141. /*!
  142.   Set the rotation angle of the object to \e degrees around the X axis.
  143. */
  144.  
  145. void GLBox::setXRotation( int degrees )
  146. {
  147.     xRot = (GLfloat)(degrees % 360);
  148.     updateGL();
  149. }
  150.  
  151.  
  152. /*!
  153.   Set the rotation angle of the object to \e degrees around the Y axis.
  154. */
  155.  
  156. void GLBox::setYRotation( int degrees )
  157. {
  158.     yRot = (GLfloat)(degrees % 360);
  159.     updateGL();
  160. }
  161.  
  162.  
  163. /*!
  164.   Set the rotation angle of the object to \e degrees around the Z axis.
  165. */
  166.  
  167. void GLBox::setZRotation( int degrees )
  168. {
  169.     zRot = (GLfloat)(degrees % 360);
  170.     updateGL();
  171. }
  172.